﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<Cliente> clientes = ClienteBLL.GetClientes();
            if (clientes != null)
            {
                comboCliente.DataSource = clientes;
                comboCliente.DataValueField = "iCliente_id";
                comboCliente.DataTextField = "sCliente_nm";
                comboCliente.DataBind();
            }
            List<Producto> productos = ProductoBLL.GetProductos();
            if (productos != null)
            {
                comboProducto.DataSource = productos;
                comboProducto.DataValueField = "iProducto_id";
                comboProducto.DataTextField = "sProducto_nm";
                comboProducto.DataBind();
                if (productos.Count > 0)
                    txtPrecio.Text = Convert.ToString(calculatePrice(productos[0].dProducto_costo));
            }
        }
    }
    protected void btnVenta_Click(object sender, EventArgs e)
    {
        string fecha = txtVenta.Text;
        string producto = comboProducto.SelectedValue;
        string cliente = comboCliente.SelectedValue;
        string precio = txtPrecio.Text;
        if (producto != "" && cliente != "" && precio != "" && fecha != "")
        {
            VentaBLL.InsertVenta(new Venta(0, Convert.ToDateTime(fecha), Convert.ToInt32(cliente), Convert.ToDecimal(precio), Convert.ToInt32(producto)));
        }
        resetValues();
    }
    protected void btnProducto_Click(object sender, EventArgs e)
    {
        string produco_desc = txtProducto.Text;
        string producto_costo = txtProductoCosto.Text;
        if (produco_desc != "" && producto_costo != "")
        {
            decimal costo = Convert.ToDecimal(producto_costo);
            ProductoBLL.InsertProducto(new Producto(0, produco_desc, costo));
        }
        resetValues();
    }
    protected void btnCliente_Click(object sender, EventArgs e)
    {
        string cliente = txtCliente.Text;
        if (cliente != "")
        {
            Cliente cli = new Cliente(0, cliente);
            ClienteBLL.InsertCliente(cli);
        }
        resetValues();
    }
    protected void btnRefresh_Click(object sender, EventArgs e)
    {
        Response.Redirect("refresh.aspx");
    }
    [WebMethod]
    public static string UpdatePrice(string productoID)
    {
        try
        {
            int id = Convert.ToInt32(productoID);
            Producto p = ProductoBLL.GetProductoByID(id);
            if (p != null)
            {
                return Convert.ToString(calculatePrice(p.dProducto_costo));
            }
            return "FORMATERROR";
        }
        catch (Exception)
        {
            return "FORMATERROR";
        }
    }
    public static decimal calculatePrice(decimal cost)
    {
        decimal percentageGain = cost * (0.10m);
        decimal result = Math.Round((cost + percentageGain), 2);
        return result;
    }

    private void resetValues()
    {
        this.txtProducto.Text = "";
        this.txtCliente.Text = "";
        this.txtProductoCosto.Text = "";
    }

    [WebMethod]
    public static List<GProduct> ListProducts(string dtStart, string dtEnd)
    {
        List<GProduct> listProduct = new List<GProduct>();
        List<GProduct> listaVentas = GProductBLL.GetProductsByDate(Convert.ToDateTime(dtStart), Convert.ToDateTime(dtEnd));//VentaBLL.GetVentasByDateRange(DateTime.Today, DateTime.Today);
        List<GProduct> listProductFinal = Convertion.ColorFill(listaVentas);
        return listProductFinal;
    }

    [WebMethod]
    public static List<GProduct> ListProductsByClient(string dtStart, string dtEnd, string clienteID)
    {
        List<GProduct> listProduct = new List<GProduct>();
        List<GProduct> listaVentas = GProductBLL.GetProductsByDate(Convert.ToDateTime(dtStart), Convert.ToDateTime(dtEnd), Convert.ToInt32(clienteID));//VentaBLL.GetVentasByDateRange(DateTime.Today, DateTime.Today);
        List<GProduct> listProductFinal = Convertion.ColorFill(listaVentas);
        return listProductFinal;
    }

    [WebMethod]
    public static List<GProduct> ListDates(string dtStart, string dtEnd)
    {
        List<GProduct> listProduct = new List<GProduct>();
        List<GProduct> listaVentas = GProductBLL.GetVentasByRange(Convert.ToDateTime(dtStart), Convert.ToDateTime(dtEnd));//VentaBLL.GetVentasByDateRange(DateTime.Today, DateTime.Today);
        List<GProduct> listProductFinal = Convertion.ColorFill(listaVentas);
        return listProductFinal;
    }

    [WebMethod]
    public static List<GProduct> ListDatesByClient(string dtStart, string dtEnd, string clienteID)
    {
        List<GProduct> listProduct = new List<GProduct>();
        List<GProduct> listaVentas = GProductBLL.GetVentasByRange(Convert.ToDateTime(dtStart), Convert.ToDateTime(dtEnd), Convert.ToInt32(clienteID));//VentaBLL.GetVentasByDateRange(DateTime.Today, DateTime.Today);
        List<GProduct> listProductFinal = Convertion.ColorFill(listaVentas);
        return listProductFinal;
    }

    [WebMethod]
    public static List<Cliente> GetAvailableClients()
    {
        List<Cliente> lista = ClienteBLL.GetAvailableClientes();
        if (lista != null)
        {
            lista.Insert(0, new Cliente(0, "--"));
        }
        else
        {
            lista = new List<Cliente>();
            lista.Add(new Cliente(0, "--"));
        }
        return lista;
    }
}